Source code for src.db
import os, sys, re, MySQLdb
from os.path import normpath, join
from sys import path
from contextlib import closing
import cardsharp as cs
from configuration import db_info
[docs]def create_db(db, drop_db=True):
"""Create an output relational database. Will drop existing database unless the drop_db parameter is set to False.
@param db: Dictionary containing the database metadata including the database name and connection parameters.
@param drop_db: If set to True will cause the database to be dropped if it already exists, default is True.
"""
with closing(MySQLdb.connect(user=db['user'], passwd=db['pass'])) as cnx:
with closing(cnx.cursor()) as c:
c.execute('show databases')
response = c.fetchall()
if db['name'] not in [db_list[0] for db_list in response]:
c.execute("""CREATE DATABASE %s CHARACTER SET utf8 COLLATE utf8_unicode_ci""" % db['name'])
elif drop_db:
c.execute("DROP DATABASE %s" % db['name'])
print """CREATE DATABASE %s CHARACTER SET utf8 COLLATE utf8_unicode_ci""" % db['name']
c.execute("""CREATE DATABASE %s CHARACTER SET utf8 COLLATE utf8_unicode_ci""" % db['name'])
[docs]def create_lookups(db):
"""Helper function to add lookup tables to a database.
The lookup tables reside within a directory db_info['dir'],
each table is stored as a file in the lookup directory with the filename
being the name of the table."""
for file in os.listdir(join(db['dir'], 'lookups')):
try:
if re.match('[a-zA-Z0-9]+\.xls', file):
name, ext = file.split('.')
except ValueError:
print (''.join(["ValueError: too many values to unpack.", " Make sure all your files are closed."]))
sys.exit(1)
ext = '.' + ext
table = cs.load(source=join(db['dir'], 'lookups', file), format='excel')
table['id'].convert('integer')
table['id'].flags.primary_key = 'id'
cs.wait()
table.save(source=db['name'], format='mysql', dataset=name,
user = db['user'], pwd = db['pass'],
overwrite=True)
cs.wait()